package Collection;/*
 *
 * @author 陈粒
 * @version 创建时间：2021/7/19 20:23
 */

import org.junit.Test;

import java.util.*;

public class List {
    /**
     * ArrayList集合：
     * list接口下的一个类，是一个有序的集合，带索引(下标)的对象数组，提供了随机访问数据，
     * 遍历数据的时间（随机遍历get方法，for循环是最快的），迭代器最慢。
     * 它是一个非线程安全的类，做遍历较快
     * 用途：适用在对元素查询操作较频繁的时候
     * 特点：
     * - 有序
     * - 允许重复元素
     * - 线程不安全，删除，在特定未知插入元素都比较低效
     * - 底层会自动创建数组来存放对象，数组的初始容量是10
     */
    @Test
    public void TestArrayList() {//ArrayList集合
        ArrayList<String> list = new ArrayList<String>();//创建一个ArrayList集合
        list.add("asdf1");
        list.add("asdf2");
        list.add("asdf2");
        list.add("asdf4");
        list.addAll(new ArrayList<>());//在集合里添加一个空集合
        list.add(0, "5");//将五添加到第一个
        list.clear();//清除集合
        //list.ensureCapacity(minCapacity);改变集合长度
        list.add("asdf5");
        list.add("asdf6");
        list.add("5");
        list.remove(2);//删除第二个集合元素，使用的下标
        list.remove("5");//删除5,没有则不用删除
        list.set(1, "2");//将第一个数修改为2
        System.out.println(list);
        list.clear();//清空集合
        System.out.println(list);//输出空集合[]
    }

    @Test
    public void TestLinkedList() {
        LinkedList<String> llist = new LinkedList<>();
        llist.offer("asdf1");//新增元素
        llist.offer("asdf2");//新增元素
        llist.offer("asdf3");//新增元素
        llist.offer("asdf4");//新增元素
        llist.offerFirst("asdf0");//新增首元素
        llist.offerLast("asdf_end");//新增尾元素
        //获取但不移除集合中的首元素
        System.out.println(llist.element());
        System.out.println(llist.peek());
        System.out.println(llist.peekFirst());
        //获取但不移除集合中的尾元素
        System.out.println(llist.peekLast());
        llist.poll();//移除首元素
        llist.pollFirst();//移除首元素
        llist.pollLast();//移除尾元素
        llist.addAll(new ArrayList<>());//在集合里添加一个空集合
        llist.add(0, "5");//将五添加到第一个
        llist.clear();//清除集合
        //list.ensureCapacity(minCapacity);改变集合长度
        llist.add("asdf5");
        llist.add("asdf6");
        llist.add("5");
        llist.remove(2);//删除第二个集合元素，使用的下标
        llist.remove("5");//删除5,没有则不用删除
        llist.set(1, "2");//将第一个数修改为2
        System.out.println(llist);
    }
}
